package de.androidbuch.amando.common;

import android.location.Location;
import android.location.LocationManager;

import com.google.android.maps.GeoPoint;

/**
 * @author Arno Becker, 2010 visionera gmbh
 */
public class GpsData {
  
  /** Schlüssel für den Längengrad. */
  public static final String KEY_LAENGENGRAD = 
    "laengengrad";
  
  /** Schlüssel für den Breitengrad. */
  public static final String KEY_BREITENGRAD = 
    "breitengrad";
  
  /** Schlüssel für die Höhe. */
  public static final String KEY_HOEHE = "hoehe";
  
  /** Schlüssel für den Zeitstempel. */
  public static final String KEY_ZEITSTEMPEL = 
    "zeitstempel";
  
  /** Speichert den Längengrad. */
  public double mLaengengrad;
  
  /** Speichert den Breitengrad. */
  public double mBreitengrad;
  
  /** Speichert die Höhe. */
  public double mHoehe;
  
  /** Speichert den Zeitstempel. */
  public long mZeitstempel;

  /**
   * Erzeugt aus einem Location-Objekt ein GpsData-Objekt.
   * 
   * @param position Eine Geopoition
   * @return GpsData-Objekt
   */
  public static GpsData valueOf(final Location position) {
    return new GpsData(position.getLongitude(), position
        .getLatitude(), position.getAltitude(), position
        .getTime());
  }

  /**
   * Konstruktor zur Erzeugung eines GpsData-Objekts.
   * 
   * @param laengengrad Längengrad
   * @param breitengrad Breitengrad
   * @param hoehe Höhe üNN
   * @param zeitstempel Zeitpunkt
   */
  public GpsData(final double laengengrad, 
      final double breitengrad, final double hoehe, 
      final long zeitstempel) {
    this.mLaengengrad = laengengrad;
    this.mBreitengrad = breitengrad;
    this.mHoehe = hoehe;
    this.mZeitstempel = zeitstempel;
  }

  /**
   * Umrechnung in einen GeoPoint.
   * 
   * @return Objekt vom Typ GeoPoint.
   */
  public GeoPoint toGeoPoint() {
    return new GeoPoint(
        (int) (mBreitengrad * 1E6),
        (int) (mLaengengrad * 1E6));
  }
  
  /**
   * Erzeugt ein Location-Objekt aus diesem Objekt.
   * 
   * @return Location-Objekt.
   */
  public Location toLocation() {
    final Location location = 
      new Location(LocationManager.GPS_PROVIDER);
    location.setLongitude(mLaengengrad); 
    location.setLatitude(mBreitengrad);    
    location.setAltitude(mHoehe);
    location.setTime(mZeitstempel);
    
    return location;
  }
  
  @Override
  public String toString() {
    return "GpsData [mBreitengrad=" + mBreitengrad
        + ", mHoehe=" + mHoehe + ", mLaengengrad="
        + mLaengengrad + ", mZeitstempel=" + mZeitstempel
        + "]";
  }

}
